Coursera week8
Unsupervised Learning(教師なし学習)
教師なし学習では、データ$ x がラベル付けされておらず、アルゴリズム自らがデータの構造を見つけなければいけません。その代表例が、Clustering(クラスタリング)で、データからパターンを抽出し、複数の似た者同士のグループにまとめます。代表的なアルゴリズムにK-meansがあります。
K-means
K-Meansは最も単純なクラスタリングアルゴリズムです。手順は以下のようです。
①クラスター中心の候補を決める
データ$ x と同次元にある、$ K 個の中心点 (Centroid) $ \mu_1,...,\mu_k を決める
②各データサンプル$ x^{(i)} のラベル$ c^{(i)} を決める
中心点$ \mu_1,...,\mu_k のうち最も距離が近いもののインデックス ($ 1, ..., K のどれか)に決める
③各中心点の座標を更新する
新しい中心点$ \mu_k の座標は、クラスター$ k と分類されたデータ$ x ($ c^{(i)}=x^{(i)} )の平均をとする。
例として、$ K=3のとき、アルゴリズムを繰り返していくときのクラスタリングの様子を以下に示します。
クラスタリングの例
https://gyazo.com/f74128b2d91b64223f3e51775155adf6
最初は適当な所にある中心点でも、K-meansが繰り返されるごとに各中心点が別々のクラスターの中心へと移動していき、クラスタリングがより正確になされていくのがわかります。
また、②で最も距離が近いインデックス(最小値)を求める式は以下のようになります。
Cost Function(目的関数)
https://gyazo.com/34a35bfa71b72f156fc982610a8a884d
注意点
クラスター数$ K はデータサンプル数$ m より小さくなくてはいけません。
中心点$ \mu_1,...,\mu_k の初期値は、元のデータ$ x からランダムに$ K 個選びます。
PCA(Principal Component Analysis)
PCA (Principal Component Analysis)は主成分分析とも呼ばれ、クラスタリングのみならず、あらゆるデータサイエンス分野で大活躍する統計手法です。PCAを使うことでデータの次元減少 (Dimensionality Reduction)ができるため、データサイズの圧縮 (Compression)や、可視化 (Visualization)に威力を発揮します。容量が軽ければ計算も捗るし、3次元以下のデータだったらグラフを作ることができるので非常に便利です。
PCAのデータの次元減少は、線形回帰 (Linear Regression)と比較するとわかりやすいです。
線形回帰
各データと回帰直線の$ x, y 方向の距離を最小にするようなベクトルを選ぶ。
PCA
各データからあるベクトルに投射した距離を最小にするようなベクトルを選ぶ。
https://gyazo.com/e9264b12a1277e600da9ef1468202cfd
3次元から2次元に変換するときは、PCAは3次元空間上で、各データからの投射誤差が最小となるような2つのベクトル$ u^{(1)}, u^{(2)} を見つけます。そうすることで、元データ$ x は、新たに軸$ u^{(1)}, u^{(2)} を持つ平面上に表現できます。
https://gyazo.com/093b9f59c08aa8cdee5c051a2bb0881a
n -> k の次元削減を行うPCAのアルゴリズムは、以下の手順をたどります。
①データのスケーリング (例えばz-scoring)を行い、説明変数同士の範囲を揃える。
$ x = \frac{x - mean(x)}{std(x)}
②共分散行列 (Covariance Matrix) を計算する。
$ \Sigma = \frac{1}{m}\sum_{i=1}^{n}(x^{(i)})(x^{(i)})^T
次元を$ k まで減少させたいので、$ n×$ n行列の$ Uから最初の$ k個の固有ベクトルを取ってきます。この計算で、$ x($ m×$ n次元)から$ z($ m×$ k次元)に変換できます。
これで次元を減らすことができますが、それは同時にデータ$ x が持っていた情報の一部が失われてしまうことにもなります。
どれくらいの情報量が失われたのか定量したいとき、variance explainedというものを計算します。この計算には、まず$ z から元の次元にデータを戻したものxapproxを求め、それが元データ$ x とどれくらい違っているかを確認します。
元の次元に戻す (Reconstruction)ことで得られるxapproxは、以下のように計算します。
$ X_{approx} = U_{reduce}Z
これにより、$ z($ m×$ k次元)からxapprox ($ m×$ n次元)に復活させることができます。
variance explainedは、以下のように計算します。
$ variance explained = 1 - \frac{\sum_{i=1}^{m}|| x^{(i)} - x^{(i)}_{approx} ||^2}{\sum_{i=1}^{m}|| x^{(i)} ||^2}
$ x と$ xapproxがどれくらいずれているか、二乗差を取って割合を計算しています。
実は、固有値計算のときに出てきた固有値行列$ S を使っても同じです。
$ variance explained = \frac{\sum_{i=1}^{k}S_{i, i}}{\sum_{i=1}^{n}S_{i, i}}
このvariance explainedが、0.99を下回らない (99%の情報が保たれている)ように$ k を選択するのが望ましいとされています。
PCAの使いどころ
データ圧縮
メモリ使用量を減らせる
学習を加速させる
可視化
2または3次元に圧縮するとデータをプロットできる